
/**
 * created by lpw
 */
public class TestClass {

    public static void main(String[] args) {
        int[] array =  {-4, 1, 2, 2, 5, 5 , 5 , 8, 10};
        int value = 6;
        int index=findIndex(array,value);
        if (index<0){
            System.out.println("没有找到符合的数");
        }else {
            System.out.println(String.format("小于等于%d的最后一个数为%d,下标为%d",value,array[index],index));
        }

    }

    //使用二分法查找小于等于 某个数的最后一个数的下标
    public static int findIndex(int[] array,int k){
        //不满足条件的情况，返回-1
        if(array==null||array.length==0||k<array[0]) return -1;
        //k>=数组最大数,直接返回最大数
        if (k>=array[array.length-1]) return array.length-1;

        int left=0,right=array.length-1,middle=0;
        int index=-1;
        while(left<right){
            middle=(left+right)/2;
            if (array[middle]<=k){
                index=middle;
            }
            if(array[middle]<=k) left=middle+1;
            if(array[middle]>k) right=middle-1;
        }
//        System.out.println(left+"-----------"+right+"-----------------"+middle);
//        System.out.println("---------------"+index);
        return index;
    }
}